package com.tang.objectOriented.basics.methods;

public class MethodDetail01 {
    public static void main(String[] args) {
        AA a = new AA();
        a.f3("tom", 10); //ok
        //细节: 实参和形参的类型要一致或兼容、个数、顺序必须一致
        // a.f3(100, "jack");
        int[] res = a.getSumAndSub(1, 4);
        System.out.println("和=" + res[0]);
        System.out.println("差=" + res[1]);
        //细节: 调用带参数的方法时，一定对应着参数列表传入相同类型或兼容类型 的参数 byte b
        byte b1 = 1;
        byte b2 = 2;
        a.getSumAndSub(b1, b2);//byte -> int
        //a.getSumAndSub(1.1, 1.8);//double ->int(×)
    }
}

class AA {
    //细节：方法不能嵌套
    public void f4() {
        //错误
        //punlic void f5(){
        //
        //}
    }
    //如果方法是 void，则方法体中可以没有 return 语句，或者 只写 return ;
    public void f3(String str, int n) {
        //return 3; //错误，声明了无返回值
        return;
    }

    //返回类型可以为任意类型，包含基本类型或引用类型(数组，对象)
    //1. 一个方法最多有一个返回值 [思考，如何返回多个结果 返回数组 ]
    public int[] getSumAndSub(int n1, int n2) {
        int[] resArr = new int[2]; //
        resArr[0] = n1 + n2;
        resArr[1] = n1 - n2;
        return resArr;
    }

    //如果方法要求有返回数据类型，则方法体中最后的执行语句必须为 return 值;
    //而且要求返回值类型必须和 return 的值类型一致或兼容
    public double f1() {
        double dl = 1.1 * 3;
        int n = 100;
        double[] array = {1.1, 2.2, 3.3, 4.3, 5.5};
        //return n; // ok --> int >>> double
        return dl; //ok --> double
        //return array; //错误　[] >>>> double

    }
}